/**
 * 
 */
package br.org.bertol.mestrado.engine.optimisation.sls;

import java.util.Collections;

import br.org.bertol.mestrado.engine.optimisation.Operacao;
import br.org.bertol.mestrado.engine.optimisation.entity.AbstractUnit;

/**
 * @author contaqualquer
 */
public enum SlsMovement implements Operacao<AbstractUnit> {

    busca_local {
        @Override
        public void execute(final AbstractUnit particle) {

            int begin = (particle.getRoute().size() - 1);

            int controlePermuta = particle.getControlePermuta();

            int x1 = controlePermuta;

            int x2 = particle.getX2() - 1;

            // caso tenha passado o último índice
            // volta para o come�o da lista
            if (x1 < 0) {
                x1 += begin;
            }

            if (x2 < 0) {
                x2 += begin;
            }

            controlePermuta = x1;

            Collections.swap(particle.getRoute(), x1, x2);

            particle.setControlePermuta(controlePermuta);

            particle.setX1(x1);

            particle.setX2(x2);
        }
    };

}
